//
// Created by 10741 on 2021/4/29.
//

#ifndef CATALOGTREE_FILE_H
#define CATALOGTREE_FILE_H

#include <string>
#include <map>
#include <utility>

using namespace std;

struct file{
    file(bool _isDir, file *parent, string _fileName = "");

    file(const file &source, file *parent);

    ~file();

    /* 若该目录下存在此子目录, 返回1; 若存在此文件, 返回2; 否则返回0 */
    int findName(string &theName);

    /* 列出当前目录下的子文件和子目录 */
    void dir();

    /* 返回该文件的绝对路径 */
    string absolutePath();

    /* 将文件信息写入指定文件流中 */
    void save(ofstream &writer, int level, bool isCompressed);

    /* 从指定文件流中读取文件信息 */
    void load(ifstream &reader);

    /* 删除该目录下的所有目录和文件 */
    void clear();

    /* 画出当前目录的树形结构 */
    void tree(string &s);

    /* 子文件 */
    map<string, file *> subFile;

    /* 子目录 */
    map<string, file *> subDir;

    /* 上一级目录的指针 */
    file *parent;

    /* 文件名 */
    string fileName;

    /* 若该文件为目录文件, 则值为 true */
    bool isDir;
};


#endif //CATALOGTREE_FILE_H
